package cn.iocoder.yudao.module.biz.service.documentImpl;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
import cn.iocoder.yudao.module.biz.controller.admin.risk.basicManage.vo.BizBasicManageCreateReqVO;
import cn.iocoder.yudao.module.biz.controller.admin.risk.basicManage.vo.BizBasicManageExcelVO;
import cn.iocoder.yudao.module.biz.controller.admin.risk.basicManage.vo.BizBasicManageImportRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import java.util.*;
import cn.iocoder.yudao.module.biz.controller.admin.documentImpl.vo.*;
import cn.iocoder.yudao.module.biz.dal.dataobject.documentImpl.BizDocumentImplDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

import cn.iocoder.yudao.module.biz.convert.documentImpl.BizDocumentImplConvert;
import cn.iocoder.yudao.module.biz.dal.mysql.documentImpl.BizDocumentImplMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.biz.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;

/**
 * 文件落实 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class BizDocumentImplServiceImpl implements BizDocumentImplService {

    @Resource
    private BizDocumentImplMapper documentImplMapper;

    @Override
    public String createDocumentImpl(BizDocumentImplCreateReqVO createReqVO) {
        // 插入
        BizDocumentImplDO documentImpl = BizDocumentImplConvert.INSTANCE.convert(createReqVO);
        if(documentImpl.getFilePath() !=null && !documentImpl.getFilePath().equals("")){
            documentImpl.setFeedbackAttach(1);
        }
        documentImplMapper.insert(documentImpl);
        // 返回
        return documentImpl.getId();
    }

    @Override
    public void updateDocumentImpl(BizDocumentImplUpdateReqVO updateReqVO) {
        // 校验存在
        this.validateDocumentImplExists(updateReqVO.getId());
        // 更新
        BizDocumentImplDO updateObj = BizDocumentImplConvert.INSTANCE.convert(updateReqVO);
        if(updateObj.getFilePath() !=null && !updateObj.getFilePath().equals("")){
            updateObj.setFeedbackAttach(1);
        }else{
            updateObj.setFeedbackAttach(0);
        }
        documentImplMapper.updateById(updateObj);
    }

    @Override
    public void deleteDocumentImpl(String id) {
        // 校验存在
        this.validateDocumentImplExists(id);
        // 删除
        documentImplMapper.deleteById(id);
    }

    private void validateDocumentImplExists(String id) {
        if (documentImplMapper.selectById(id) == null) {
            throw exception(DOCUMENT_IMPL_NOT_EXISTS);
        }
    }

    @Override
    public BizDocumentImplDO getDocumentImpl(String id) {
        return documentImplMapper.selectById(id);
    }

    @Override
    public List<BizDocumentImplDO> getDocumentImplList(Collection<String> ids) {
        return documentImplMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<BizDocumentImplDO> getDocumentImplPage(BizDocumentImplPageReqVO pageReqVO) {
        return documentImplMapper.selectPage(pageReqVO);
    }

    @Override
    public List<BizDocumentImplDO> getDocumentImplList(BizDocumentImplExportReqVO exportReqVO) {
        return documentImplMapper.selectList(exportReqVO);
    }

    @Override
    public BizDocumentImplImportRespVO importExcel(List<BizDocumentImplExcelVO> importDocument) {
        if (CollUtil.isEmpty(importDocument)) {
            throw exception(DOCUMENT_IMPL_NOT_EXISTS);
        }
        BizDocumentImplImportRespVO respVO = BizDocumentImplImportRespVO.builder().failureDocumentnames(new LinkedHashMap<>()).build();
        Map<String,String> map = new HashMap<>();
        for(BizDocumentImplExcelVO vo : importDocument){
            //文件名为空
            if(vo.getFileName()==null || vo.getFileName().equals("")){
                map.put("文件名不能为空","请修改");
                respVO.setFailureDocumentnames(map);
                return respVO;
            }
            //文件类型为空
            if(vo.getFileType()==null || vo.getFileType().equals("")){
                map.put("文件类型不能为空","请修改");
                respVO.setFailureDocumentnames(map);
                return respVO;
            }
            BizDocumentImplCreateReqVO documentImplCreateReqVO = new BizDocumentImplCreateReqVO();
            documentImplCreateReqVO.setFileName(vo.getFileName());
            documentImplCreateReqVO.setFileType(vo.getFileType());
            documentImplCreateReqVO.setImplStatus(vo.getImplStatus());
            documentImplCreateReqVO.setFeedbackAttach(0);
            createDocumentImpl(documentImplCreateReqVO);
        }
        return respVO;
    }

}
